import { unified } from 'unified'
import rehypeParse from 'rehype-parse'
import rehypeStringify from 'rehype-stringify'
import rehypeSlug from 'rehype-slug'
import rehypeAutolinkHeadings from 'rehype-autolink-headings'
import rehypeKatex from 'rehype-katex'
import rehypeKatexNoTranslate from 'rehype-katex-notranslate'
import rehypePrismPlus from 'rehype-prism-plus'
import rehypePresetMinify from 'rehype-preset-minify'

/**
 * 处理 HTML 内容，应用与 contentlayer 相同的 rehype 插件
 * 包括：代码高亮、标题锚点、数学公式等
 */
export async function processHtml(html: string): Promise<string> {
  try {
    // 先处理换行符
    const processedHtml = html.replace(/\r\n/g, '\n')
    
    // 使用 unified 处理 HTML，应用与 contentlayer 相同的插件链
    const result = await unified()
      .use(rehypeParse, { fragment: true }) // 解析 HTML
      // .use(rehypeSlug) // 为标题添加 id  不需要，因为这个是数据库数据
      // .use(rehypeAutolinkHeadings, {
      //   behavior: 'prepend',
      //   headingProperties: {
      //     className: ['content-header'],
      //   },
      //   content: icon,
      // }) // 为标题添加锚点链接
      .use(rehypeKatex) // 数学公式支持
      // .use(rehypeKatexNoTranslate) // 数学公式不翻译
      .use(rehypePrismPlus, { defaultLanguage: 'js', ignoreMissing: true }) // 代码高亮
      // .use(rehypePresetMinify) // 压缩 HTML
      .use(rehypeStringify) // 序列化为 HTML 字符串
      .process(processedHtml)

    return String(result)
  } catch (error) {
    console.error('处理 HTML 时出错:', error)
    // 如果处理失败，返回原始 HTML（至少保证换行符被处理）
    return html.replace(/\r\n/g, '\n')
  }
}